﻿using StockholmsStad.Utilities.Exceptions;
using System.ComponentModel;

namespace StockholmsStad.Utilities.Enums
{
    /// <summary>
    /// Den felkod som anger vilken typ av <see cref="StockholmStadSystemException"/> som inträffat. 
    /// </summary>
    public enum SystemErrorCode
    {
        /// <summary>
        /// Allvarligt fel från databasen som att databasen inte är tillgänglig eller 
        /// kastar allvarliga fel av typen transaktionsfel.
        /// </summary>
        [Description("Fel vid kommunikation med databasen. \nkontakta systemadministratör.")]
        DataAccessFailure,

        /// <summary>
        /// Åtkomst till databasen nekas för angiven användare (kan även vara "systemanvändaren")
        /// </summary>
        [Description("Åtkomst nekad. \nanvändaren är ej behörig")]
        AccessDenied,

        /// <summary>
        /// Användare har inget ärende
        /// </summary>
        [Description("Ärende saknas för angiven användare.")]
        UserHasNoTicket,

        /// <summary>
        /// Ogiltig användare
        /// </summary>
        [Description("Användarid är ogiltigt.")]
        UserNotExists,

        /// <summary>
        /// Användare existerar redan
        /// </summary>
        [Description("Användarid finns redan.")]
        UserAllreadyExist,

        /// <summary>
        /// Förrättare existerar inte
        /// </summary>
        [Description("Angiven förrättare saknas.")]
        MinisterNotExists,

        /// <summary>
        /// Förrättare måste anges vid individuell bokning
        /// </summary>
        [Description("En förrättare måste anges vid individuell bokning.")]
        IndividualBookingMinisterNotProvided,

        /// <summary>
        /// Tidsblocket existerar inte
        /// </summary>
        [Description("Tidsperioden som är angiven finns inte.")]
        TimeBlockNotExists,

        /// <summary>
        /// Förrättarkoden existerar redan
        /// </summary>
        [Description("Angiven förrättarkod existerar inte, var vänlig välj en annan kod.")]
        MinisterCodeNotExists,

        /// <summary>
        /// Förrättarkoden existerar redan
        /// </summary>
        [Description("Angiven förrättarkod finns redan, var vänlig välj en annan kod.")]
        MinisterCodeAlreadyExists,

        /// <summary>
        /// Tidsblocket finns redan definierat
        /// </summary>
        [Description("Angiven tidsperiod finns redan definierad.")]
        TimeBlockTimeAlreadyExists,

        /// <summary>
        /// Språket existerar inte
        /// </summary>
        [Description("Angivet språk saknas.")]
        LanguageDoesNotExist,

        /// <summary>
        /// Ceremonispråket exister inte
        /// </summary>
        [Description("Angivet språk för ceremonin saknas.")]
        CeremonyLanguageDoesNotExist,

        /// <summary>
        /// Certifikatspråket exister inte
        /// </summary>
        [Description("Angivet språk för vigselbeviset saknas.")]
        CertificateLanguageDoesNotExist,

        /// <summary>
        /// Bokningen måste antingen vara ordinarie eller Individuell
        /// </summary>
        [Description("Bokning måste vara av typen ordinarie eller individuell.")]
        BookingMustBeEitherOrdinaryOrIndividual,

        /// <summary>
        /// Bokningen existerar inte
        /// </summary>
        [Description("Angiven bokning saknas.")]
        BookingNotExist,

        /// <summary>
        /// Paret kan inte hittas
        /// </summary>
        [Description("Angivet par saknas.")]
        CoupleNotExists,

        /// <summary>
        /// Paret har inget ärende
        /// </summary>
        [Description("Angivet par saknar ärende.")]
        CoupleHasNoTicket,

        /// <summary>
        /// Bokningen ligger utanför inskickad hindersprövning
        /// </summary>
        [Description("Angiven bokning är inte inom tidsramen för inskickad hindersprövning.")]
        BookingIsOutsideImpedimentDoc,

        /// <summary>
        /// Hindersprövningen är inte inom tidsramen för giltig hindersprövning
        /// </summary>
        [Description("Angivet datum för hindersprövning är inte inom tidsramen för giltig hindersprövning.")]
        ImpedimentDocIsNotValid,

        /// <summary>
        /// Ceremonin kan inte hittas
        /// </summary>
        [Description("Angiven ceremoni saknas.")]
        CeremonyNotExists,

        /// <summary>
        /// Bokningen har inget datum
        /// </summary>
        [Description("Angiven bokning saknar datum.")]
        BookingDateMissing,

        /// <summary>
        /// Den aktuella tiden är redan bokad
        /// </summary>
        [Description("Den valda tiden har bokats av ett annat par. Välj en ny tid.")]
        BookingTimeBlockAlreadyBooked,

        /// <summary>
        /// Det finns ingen textyp
        /// </summary>
        [Description("Angiven texttyp saknas.")]
        TextTypeNotExists,

        /// <summary>
        /// Det finns inget sådant ärende
        /// </summary>
        [Description("Angivet ärende saknas.")]
        TicketNotExists,

        /// <summary>
        /// Det finns redan ett sådant hjälpmedel definierat
        /// </summary>
        [Description("Angivet hjälpmedel finns redan.")]
        SpecialNeedAlreadyExists,

        /// <summary>
        /// Ingen rapport kunde hittas. 
        /// </summary>
        [Description("Rapporten kunde inte hittas")]
        ReportNotExists,

        /// <summary>
        /// Ingen historik/notis kunde hittas
        /// </summary>
        [Description("Ingen historik/notis kunde hittas")]
        HistoryNotExists,
    }
}